package fr.umlv.m2.uwp2011.persistence.sujet.dao;

import java.util.ArrayList;
import java.util.List;

import fr.umlv.m2.uwp2011.persistence.matiere.Matiere;
import fr.umlv.m2.uwp2011.persistence.matiere.dao.HibernateMatiereDAO;
import fr.umlv.m2.uwp2011.persistence.sujet.ITPDAO;
import fr.umlv.m2.uwp2011.persistence.sujet.Sujet;
import fr.umlv.m2.uwp2011.persistence.sujet.TP;

public class HibernateTPDAO extends HibernateSujetDAO implements ITPDAO{
	private static final HibernateMatiereDAO matiereDAO = new HibernateMatiereDAO();

	static {
		TP tp;
		Long tp_id;
		String type = Sujet.TP;
		//--------- matiere prog reseau, id 1 -----------//
		Matiere matiere = matiereDAO.findById(1L);
		
		//--------------- tp with id 1 -----------//
		tp_id = 9L;
		tp = new TP();
		tp.setId(tp_id);
		tp.setType(type);
		tp.setMatiere(matiere);
		tp.setTitre("TP 1 : initiation a la programmation reseau");
		tp.setDescription("Description du TP 1 : initiation a la programmation reseau");
		allSujet.put(tp_id, tp);

		//--------------- tp with id 2 -----------//
		tp_id = 10L;
		tp = new TP();
		tp.setId(tp_id);
		tp.setType(type);
		tp.setMatiere(matiere);
		tp.setTitre("TP 2 : programmation reseau");
		tp.setDescription("Description du TP 2 : programmation reseau ...");
		allSujet.put(tp_id, tp);

		//--------------- tp with id 3 -----------//
		tp_id = 11L;
		tp = new TP();
		tp.setId(tp_id);
		tp.setType(type);
		tp.setMatiere(matiere);
		tp.setTitre("TP 3 : programmation reseau");
		tp.setDescription("Description du TP 3 : programmation reseau ...");
		allSujet.put(tp_id, tp);


		//--------------- tp with id 4 -----------//
		tp_id = 12L;
		tp = new TP();
		tp.setId(tp_id);
		tp.setType(type);
		tp.setMatiere(matiere);
		tp.setTitre("TP 4 : programmation reseau");
		tp.setDescription("Description du TP 4 : programmation reseau ...");
		allSujet.put(tp_id, tp);
		
		//--------- matiere prog C, id 2 -----------//
		matiere = matiereDAO.findById(2L);
		
		tp_id = 33L;
		tp = new TP();
		tp.setId(tp_id);
		tp.setType(type);
		tp.setMatiere(matiere);
		tp.setTitre("TP 1 : initiation a la programmation C");
		tp.setDescription("Description du TP 1 : initiation a la programmation C");
		allSujet.put(tp_id, tp);
		
		tp_id = 34L;
		tp = new TP();
		tp.setId(tp_id);
		tp.setType(type);
		tp.setMatiere(matiere);
		tp.setTitre("TP 2 : initiation a la programmation C");
		tp.setDescription("Description du TP 2 : initiation a la programmation C");
		allSujet.put(tp_id, tp);
		
		tp_id = 35L;
		tp = new TP();
		tp.setId(tp_id);
		tp.setType(type);
		tp.setMatiere(matiere);
		tp.setTitre("TP 3 : initiation a la programmation C");
		tp.setDescription("Description du TP 3 : initiation a la programmation C");
		allSujet.put(tp_id, tp);
		
		tp_id = 36L;
		tp = new TP();
		tp.setId(tp_id);
		tp.setType(type);
		tp.setMatiere(matiere);
		tp.setTitre("TP 4 : initiation a la programmation C");
		tp.setDescription("Description du TP 4 : initiation a la programmation C");
		allSujet.put(tp_id, tp);
		
		//--------- matiere id 3 -----------//
		matiere = matiereDAO.findById(3L);
		
		tp_id = 37L;
		tp = new TP();
		tp.setId(tp_id);
		tp.setType(type);
		tp.setMatiere(matiere);
		tp.setTitre("TP 1 : reseaux sans fil");
		tp.setDescription("Description du TP 1 : les reseaux sans fil");
		allSujet.put(tp_id, tp);
		
		tp_id = 38L;
		tp = new TP();
		tp.setId(tp_id);
		tp.setType(type);
		tp.setMatiere(matiere);
		tp.setTitre("TP 2 : reseaux sans fil");
		tp.setDescription("Description du TP 2 : les reseaux sans fil");
		allSujet.put(tp_id, tp);
		
		tp_id = 39L;
		tp = new TP();
		tp.setId(tp_id);
		tp.setType(type);
		tp.setMatiere(matiere);
		tp.setTitre("TP 3 : reseaux sans fil");
		tp.setDescription("Description du TP 3 : les reseaux sans fil");
		allSujet.put(tp_id, tp);
		
		tp_id = 40L;
		tp = new TP();
		tp.setId(tp_id);
		tp.setType(type);
		tp.setMatiere(matiere);
		tp.setTitre("TP 4 : reseaux sans fil");
		tp.setDescription("Description du TP 4 : les reseaux sans fil");
		allSujet.put(tp_id, tp);
	}

	@Override
	public List<Sujet> findAll() {
		List<Sujet> list = new ArrayList<Sujet>();
		for(Sujet sujet : allSujet.values()) {
			if(Sujet.TP.equals(sujet.getType())) {
				list.add(sujet);
			}
		}
		return list;
	}

	@Override
	public List<Sujet> findByMatiere(Long matiere_id) {
		List<Sujet> list = new ArrayList<Sujet>();
		for(Sujet sujet : allSujet.values()) {
			if(Sujet.TP.equals(sujet.getType()) && sujet.getMatiere().getId() == matiere_id) {
				list.add(sujet);
			}
		}
		return list;
	}
}
